package Buffer2;

import java.io.*;

public class Test3 {//定义一个测试类

    public static void main(String[] args) throws Exception {//main方法入口并抛出异常
        File  srcfolder=new File("E:\\itcast");//创建源文件路径对象
        File   destfolder=new File("F:");//创建目的地文件路径
        copyFile1(srcfolder,destfolder);//调用方法

    }

    private static void copyFile1(File srcfolder, File destfolder) throws Exception {
     //定义方法，源文件路径和目的地路径均作为参数
        if(srcfolder.isDirectory()){//对源文件进行判断，如果是目录
            String name = srcfolder.getName();//获取该目录的名称
            File  newfile=new File(destfolder,name);//并再F盘下复制一个同样的目录
            if(!newfile.exists()){//对F盘新创建的目录进行判断如果不存在就进行创建
                newfile.mkdirs();//
            }
            File[] files = srcfolder.listFiles();//遍历这个文件目录
            for (File file : files) {//获取到这个文件目录中个文件或者文件夹
                copyFile1(file,newfile);//再次将获取的文件或者文件夹作为参数传递到方法中再次查找
            }
        }else{//
            File  newfolder =new File(destfolder,srcfolder.getName());
            //如果ITcast是文件则调用流方法进行复制，但是必须先给定一个目录，这个目录就是初始时F盘下加上这个文件名称
            copyFile(srcfolder,newfolder);//源文件ITcast就是流读取的文件，F盘下加ITcast就是读取数据后需要写进去的文件夹名称
        }

    }


    private static void copyFile(File file, File destfolder1) throws Exception {
        //定义方法，源文件文件每一个文件名称作为第一个参数
        //目的地文件码目录作为第二个参数
        BufferedInputStream bis=new BufferedInputStream(new FileInputStream(file));//创建字节缓冲输入流对象
        BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream(destfolder1));//创建字节输出流对象
        byte[] bytes =new byte[1024];//定义读取数据的长度为1024
        int ten;//定义保存读取数据的有效数据长度变量
        while((ten=bis.read(bytes))!=-1){//使用while循环读取数据
            bos.write(bytes,0,ten);//通过字节缓冲输出流写入数据
        }
        bis.close();//关闭资源
        bos.close();//关闭资源



    }
}
